package com.zjl.redis.第02章_十大数据类型;

import com.zjl.redis.第01章_redis安装.RedisUtil;
import redis.clients.jedis.Jedis;

/**
 * String
 * List/可以重复  只能存String
 * set//不可重复  适合秒杀（一个人只能买一个）  set提供了某个成员是否在一个set集合里的重要接口
 * hash//是一个键值对集合   是一个string的映射表类似于Map<String,String>
 * zset//与set非常相似   他都关联了一个评分由从第到高方式排序  评分可重复
 * bitmap//位图
 * Bitfield
 * HyperLogLog//统计
 * GEO//地理
 * geospatial
 * Stream
 *
 *  小细节
 *     命令不区分大小写，而key是区分大小写的
 *
 */
public class A_有哪些数据类型和初步 {
    /**
     * Redis的五种数据类型的增删改查
     * 都是   key-value  key都是String
     * value：
     *   1.string：他是二进制安全的，意味着可以包含任何数据，如图片或序列化对象
     *        String类型是Redis最基本的数据类型，
     *        一个Redis中字符串value最多可以是512M
     *
     * Redis的增删改查
     *
     * select 数字//Redis  有及数据库16个数据库  0-15 数字几  进入几数据库
     * keys *   //查看当前数据库所有键
     * exists key /判断这个key是否存在  1表示true  0表示false
     * type key  //查看这个键的值的类型
     * del key //删除这个键
     * unlink key  #惰性删除指定key 背后别的线程慢慢删
     * unlink key //根据value选择非阻塞删除+仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作、
     * expire key seconds//为键值设置过期时间seconds秒  单位秒
     * pexpire key milliseconds//为键值设置过期时间milliseconds秒  单位毫秒
     * ttl key//查看这个键还有多少秒过期  -1表示永不过期  -2表示已过期
     * move key dbindex 【0-15】//将当前数据库的key移动到给定的数据库db当中
     * memory usage key//返回指定key 占用的字节数
     * dbsize//查看当前数据库key的数量
     * Flushdb//清空当前库指定的（0-15库）
     * Flushdb sync//清空当前库指定的（0-15库）
     * Flushdb async//异步清空当前库，先惰性删除，背后别的线程慢慢删
     * Flushall//清空所有库 全部16个库
     *
     * object encoding key//返回此key的value的更底层类型
     * debug object key//返回此key的value的更底层类型的详细信息
     *      必须开启  enable-debug-command local # 默认no 关闭debug 模式    local  开启
     *
     *
     * 命令不区分大小写，key区分
     * help @类型
     * 会告诉你每个数据类型的用法
     *
     * set key value [NX|XX] [GET] [EX seconds | PX milliseconds| EXAT unix-time-seconds |PXAT unix-time-milliseconds |KEEPTTL ]
     * 不止set 有，其他类型也有
     *      ●EX seconds:  以秒为单位设置过期时间
     *      ●PX milliseconds: 以毫秒为单位设置过期时间
     *      ●EXAT timestamp: 设置以秒为单位的UNIX时间戳所对应的时间为过期时间  --不好填值
     *      ●PXAT milliseconds-timestamp: 设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间 --不好填值
     *      ●NX:键不存在的时候设置键值
     *      ●XX:键存在的时候设置键值
     *      ●KEEPTTL: 保留设置前指定键的生存时间   //redis 6 才有
     *      ●GET: 返回指定键原本的值，若键不存在时返回nil
     *
     * set key{组名} value
     *      #在集群的时候会将  他会忽略{组名}的内容存入redis
     *      #非集群模式使用 set key{组名}  相当于 key{组名} 就是 key  还是需要 get key{组名} 来获取
     *      #集群模式 get key{组名}  会现根据 组名获取从哪台机器获取值
     *
     */
    public static void main(String[] args) {
        Jedis jedis = RedisUtil.getRedis();
        System.out.println(jedis.ping());//查看是否连接成功  PONG:成功
        System.out.println(jedis.keys("*"));
        System.out.println(jedis.get("z"));
        System.out.println(jedis.type("z"));

        jedis.close();
    }

}
